/**
 * @description 角色菜单中间表控制
 * @author 韩
 */

const model = require("../model/role_permission_link.js");
const { getFilter } = require("../utils/setFilter.js");



/** @description  添加角色和权限之间的关联 */
const saveRoleForPermission = async ({
    role_id, menu_ids = []
}) => {
    try {
        // 先清除roleId 这个角色的所有权限；然后重新赋值权限；
        const deleteResult = await model.deleteMany({
            role_id: { $in: role_id }
        })
        if (deleteResult) {
            console.log("删除成功", deleteResult);
            const document = menu_ids.map(item => {
                return {
                    role_id,
                    menu_id: item
                }
            })
            const result = await model.insertMany(document, { new: true });
            // const result = await model.insertMany(document);
            console.log("添加数据成功:\n", result);
            if (result) {
                return {
                    status: "0000",
                    message: "操作成功"
                }
            }
        } else {
            return {
                status: "0000",
                message: "权限保存失败"
            }
        }


    } catch (error) {
        console.log("添加结果:error", error)
    }


}



// 获取某个角色的全部仅限
const findPermissions = async ({
    role_id
}) => {
    try {
        const res = await model.find({
            role_id
        })
        // console.log(res.map(item => item.menu_id));
        return res.map(item => item.menu_id);
    } catch (error) {
        console.log("查询失败");
    }
}

/**@description 删除了一个角色或权限后，在角色&权限中间表也删除与之相关数据； */
const deletePermisson = async ({
    role_id,
    menu_id
}) => {
    try {
        let params = {
            role_id: role_id && { $in: role_id },
            menu_id: menu_id && { $in: menu_id }
        }
        params = getFilter(params);
        const deleteResult = await model.deleteMany(
            params
        );
        if (deleteResult.deletedCount) {
            return {
                status: '0000',
                message: `删除了${deleteResult.deletedCount}条数据`
            }
        } else {
            return {
                status: '0010',
                message: `删除失败`
            }
        }
    } catch (error) {

    }
}


module.exports = {
    saveRoleForPermission,
    findPermissions,
    deletePermisson
}